<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>FileCleaningTracker (Apache Commons IO 2.5 API)</title>
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
</head>
<body>
<script type="text/javascript"><!--
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="FileCleaningTracker (Apache Commons IO 2.5 API)";
    }
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar_top">
<!--   -->
</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/FileCleaningTracker.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../org/apache/commons/io/FileCleaner.html" title="class in org.apache.commons.io"><span class="strong">Prev Class</span></a></li>
<li><a href="../../../../org/apache/commons/io/FileDeleteStrategy.html" title="class in org.apache.commons.io"><span class="strong">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?org/apache/commons/io/FileCleaningTracker.html" target="_top">Frames</a></li>
<li><a href="FileCleaningTracker.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_top");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method_detail">Method</a></li>
</ul>
</div>
<a name="skip-navbar_top">
<!--   -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.apache.commons.io</div>
<h2 title="Class FileCleaningTracker" class="title">Class FileCleaningTracker</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
<li>
<ul class="inheritance">
<li>org.apache.commons.io.FileCleaningTracker</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre>public class <span class="strong">FileCleaningTracker</span>
extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
<div class="block">Keeps track of files awaiting deletion, and deletes them when an associated
 marker object is reclaimed by the garbage collector.
 <p>
 This utility creates a background thread to handle file deletion.
 Each file to be deleted is registered with a handler object.
 When the handler object is garbage collected, the file is deleted.
 <p>
 In an environment with multiple class loaders (a servlet container, for
 example), you should consider stopping the background thread if it is no
 longer needed. This is done by invoking the method
 <a href="../../../../org/apache/commons/io/FileCleaningTracker.html#exitWhenFinished"><code>exitWhenFinished</code></a>, typically in
 <code>javax.servlet.ServletContextListener.contextDestroyed(javax.servlet.ServletContextEvent)</code> or similar.</div>
<dl><dt><span class="strong">Version:</span></dt>
  <dd>$Id: FileCleaningTracker.java 1686747 2015-06-21 18:44:49Z krosenvold $</dd></dl>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor_summary">
<!--   -->
</a>
<h3>Constructor Summary</h3>
<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<td class="colOne"><code><strong><a href="../../../../org/apache/commons/io/FileCleaningTracker.html#FileCleaningTracker()">FileCleaningTracker</a></strong>()</code>&nbsp;</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method_summary">
<!--   -->
</a>
<h3>Method Summary</h3>
<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/commons/io/FileCleaningTracker.html#exitWhenFinished()">exitWhenFinished</a></strong>()</code>
<div class="block">Call this method to cause the file cleaner thread to terminate when
 there are no more objects being tracked for deletion.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/commons/io/FileCleaningTracker.html#getDeleteFailures()">getDeleteFailures</a></strong>()</code>
<div class="block">Return the file paths that failed to delete.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/commons/io/FileCleaningTracker.html#getTrackCount()">getTrackCount</a></strong>()</code>
<div class="block">Retrieve the number of files currently being tracked, and therefore
 awaiting deletion.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/commons/io/FileCleaningTracker.html#track(java.io.File,%20java.lang.Object)">track</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;file,
     <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;marker)</code>
<div class="block">Track the specified file, using the provided marker, deleting the file
 when the marker instance is garbage collected.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/commons/io/FileCleaningTracker.html#track(java.io.File,%20java.lang.Object,%20org.apache.commons.io.FileDeleteStrategy)">track</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;file,
     <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;marker,
     <a href="../../../../org/apache/commons/io/FileDeleteStrategy.html" title="class in org.apache.commons.io">FileDeleteStrategy</a>&nbsp;deleteStrategy)</code>
<div class="block">Track the specified file, using the provided marker, deleting the file
 when the marker instance is garbage collected.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/commons/io/FileCleaningTracker.html#track(java.lang.String,%20java.lang.Object)">track</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path,
     <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;marker)</code>
<div class="block">Track the specified file, using the provided marker, deleting the file
 when the marker instance is garbage collected.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/commons/io/FileCleaningTracker.html#track(java.lang.String,%20java.lang.Object,%20org.apache.commons.io.FileDeleteStrategy)">track</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path,
     <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;marker,
     <a href="../../../../org/apache/commons/io/FileDeleteStrategy.html" title="class in org.apache.commons.io">FileDeleteStrategy</a>&nbsp;deleteStrategy)</code>
<div class="block">Track the specified file, using the provided marker, deleting the file
 when the marker instance is garbage collected.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
<!--   -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long,%20int)" title="class or interface in java.lang">wait</a></code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor_detail">
<!--   -->
</a>
<h3>Constructor Detail</h3>
<a name="FileCleaningTracker()">
<!--   -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>FileCleaningTracker</h4>
<pre>public&nbsp;FileCleaningTracker()</pre>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method_detail">
<!--   -->
</a>
<h3>Method Detail</h3>
<a name="track(java.io.File, java.lang.Object)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>track</h4>
<pre>public&nbsp;void&nbsp;track(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;file,
         <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;marker)</pre>
<div class="block">Track the specified file, using the provided marker, deleting the file
 when the marker instance is garbage collected.
 The <a href="../../../../org/apache/commons/io/FileDeleteStrategy.html#NORMAL"><code>normal</code></a> deletion strategy will be used.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>file</code> - the file to be tracked, not null</dd><dd><code>marker</code> - the marker object used to track the file, not null</dd>
<dt><span class="strong">Throws:</span></dt>
<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</a></code> - if the file is null</dd></dl>
</li>
</ul>
<a name="track(java.io.File, java.lang.Object, org.apache.commons.io.FileDeleteStrategy)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>track</h4>
<pre>public&nbsp;void&nbsp;track(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a>&nbsp;file,
         <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;marker,
         <a href="../../../../org/apache/commons/io/FileDeleteStrategy.html" title="class in org.apache.commons.io">FileDeleteStrategy</a>&nbsp;deleteStrategy)</pre>
<div class="block">Track the specified file, using the provided marker, deleting the file
 when the marker instance is garbage collected.
 The speified deletion strategy is used.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>file</code> - the file to be tracked, not null</dd><dd><code>marker</code> - the marker object used to track the file, not null</dd><dd><code>deleteStrategy</code> - the strategy to delete the file, null means normal</dd>
<dt><span class="strong">Throws:</span></dt>
<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</a></code> - if the file is null</dd></dl>
</li>
</ul>
<a name="track(java.lang.String, java.lang.Object)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>track</h4>
<pre>public&nbsp;void&nbsp;track(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path,
         <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;marker)</pre>
<div class="block">Track the specified file, using the provided marker, deleting the file
 when the marker instance is garbage collected.
 The <a href="../../../../org/apache/commons/io/FileDeleteStrategy.html#NORMAL"><code>normal</code></a> deletion strategy will be used.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>path</code> - the full path to the file to be tracked, not null</dd><dd><code>marker</code> - the marker object used to track the file, not null</dd>
<dt><span class="strong">Throws:</span></dt>
<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</a></code> - if the path is null</dd></dl>
</li>
</ul>
<a name="track(java.lang.String, java.lang.Object, org.apache.commons.io.FileDeleteStrategy)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>track</h4>
<pre>public&nbsp;void&nbsp;track(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path,
         <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;marker,
         <a href="../../../../org/apache/commons/io/FileDeleteStrategy.html" title="class in org.apache.commons.io">FileDeleteStrategy</a>&nbsp;deleteStrategy)</pre>
<div class="block">Track the specified file, using the provided marker, deleting the file
 when the marker instance is garbage collected.
 The speified deletion strategy is used.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>path</code> - the full path to the file to be tracked, not null</dd><dd><code>marker</code> - the marker object used to track the file, not null</dd><dd><code>deleteStrategy</code> - the strategy to delete the file, null means normal</dd>
<dt><span class="strong">Throws:</span></dt>
<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</a></code> - if the path is null</dd></dl>
</li>
</ul>
<a name="getTrackCount()">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getTrackCount</h4>
<pre>public&nbsp;int&nbsp;getTrackCount()</pre>
<div class="block">Retrieve the number of files currently being tracked, and therefore
 awaiting deletion.</div>
<dl><dt><span class="strong">Returns:</span></dt><dd>the number of files being tracked</dd></dl>
</li>
</ul>
<a name="getDeleteFailures()">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getDeleteFailures</h4>
<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;getDeleteFailures()</pre>
<div class="block">Return the file paths that failed to delete.</div>
<dl><dt><span class="strong">Returns:</span></dt><dd>the file paths that failed to delete</dd><dt><span class="strong">Since:</span></dt>
  <dd>2.0</dd></dl>
</li>
</ul>
<a name="exitWhenFinished()">
<!--   -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>exitWhenFinished</h4>
<pre>public&nbsp;void&nbsp;exitWhenFinished()</pre>
<div class="block">Call this method to cause the file cleaner thread to terminate when
 there are no more objects being tracked for deletion.
 <p>
 In a simple environment, you don't need this method as the file cleaner
 thread will simply exit when the JVM exits. In a more complex environment,
 with multiple class loaders (such as an application server), you should be
 aware that the file cleaner thread will continue running even if the class
 loader it was started from terminates. This can consitute a memory leak.
 <p>
 For example, suppose that you have developed a web application, which
 contains the commons-io jar file in your WEB-INF/lib directory. In other
 words, the FileCleaner class is loaded through the class loader of your
 web application. If the web application is terminated, but the servlet
 container is still running, then the file cleaner thread will still exist,
 posing a memory leak.
 <p>
 This method allows the thread to be terminated. Simply call this method
 in the resource cleanup code, such as
 <code>javax.servlet.ServletContextListener.contextDestroyed(javax.servlet.ServletContextEvent)</code>.
 Once called, no new objects can be tracked by the file cleaner.</div>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar_bottom">
<!--   -->
</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/FileCleaningTracker.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../org/apache/commons/io/FileCleaner.html" title="class in org.apache.commons.io"><span class="strong">Prev Class</span></a></li>
<li><a href="../../../../org/apache/commons/io/FileDeleteStrategy.html" title="class in org.apache.commons.io"><span class="strong">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?org/apache/commons/io/FileCleaningTracker.html" target="_top">Frames</a></li>
<li><a href="FileCleaningTracker.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_bottom");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method_detail">Method</a></li>
</ul>
</div>
<a name="skip-navbar_bottom">
<!--   -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small>Copyright &#169; 2002&#x2013;2016 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
</body>
</html>
